package org.demo.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.apache.ibatis.executor.Executor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author yexi
 */
@Configuration
public class MybatisPlusConfiguration {

    /**
     * 分页拦截器，用于拦截 SQL 并实现物理分页的功能。
     * 它可以自动地在 SQL 语句中添加分页相关的信息，例如 LIMIT、OFFSET 等，从而实现分页查询。
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        System.out.println("初始化MybatisPlusInterceptor");
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 创建一个分页拦截器
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();

        // 设置请求页数溢出最大页数后是否进行处理，true返回首页，false不进行处理。默认false。
        paginationInnerInterceptor.setOverflow(true);
        // 设置最大单页限制数量。-1表示无限制。
        paginationInnerInterceptor.setMaxLimit(-1L);

        /**
         * 确定数据库方言，可以根据不同的数据库类型自动地生成对应的分页SQL语句(不同数据库的分页语句可能不一样)
         * 但实际上，你可以选择不设置，在底层中 Plus 有着自行判断方言的能力。只是如果你能明确项目中只存在一种数据库类型，则可以进行设置提升效率。
         * @see PaginationInnerInterceptor#findIDialect(Executor) 若有默认的 dbType，则使用默认的，否则通过连接获取数据库类型。
         */
        // paginationInnerInterceptor.setDbType(DbType.MYSQL);

        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }



}
